home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / fpu881 / src6.zoo / _float_.s < prev    next >
Text File  |  1991-09-24  |  2KB  |  71 lines

  1.  
  2. # double _Float_( long Value_1, long Exponent_1, long Value_2, long Exponent_2 )
  3. #
  4. # merges the accumulators Value_1, Value_2 and the Exponent to a double
  5. # precision float
  6. # called by strtod()
  7. #
  8. # does all floating point computations with extended precision on the fpu
  9. #
  10. # mjr, 30.1.1991
  11. #
  12. # base =    0xfffa50
  13. #      the fpu addresses are taken relativ to "base":
  14. #
  15. # a0: fpu base address
  16. #
  17.  
  18. # waiting loop ...
  19. #
  20. # wait:
  21. # ww:    cmpiw    #0x8900,a0@(resp)
  22. #     beq    ww
  23. # is coded directly by
  24. #    .long    0x0c688900, 0xfff067f8 (a0)
  25. # and
  26. # www:    tst.w    a0@(resp)
  27. #    bmi.b    www
  28. # is coded by
  29. #    .word    0x4a68,0xfff0,0x6bfa        | test
  30. #
  31.  
  32. comm =     -6
  33. resp =    -16
  34. zahl =      0
  35.  
  36.     .globl __Float_
  37. .even
  38. .text
  39. __Float_:
  40.     lea    0xfffa50,a0                            | fpu address
  41.  
  42. #    movew    #%0100 0000 1001 0010,a0@(comm)    | ftentoxl -> fp1
  43.     movew    #0x4092,a0@(comm)                | ftentoxl -> fp1
  44.     .long    0x0c688900, 0xfff067f8
  45.     movel    a7@(8),a0@                        | load Exponent_1
  46.  
  47. #    movew    #%0100 0001 0001 0010,a0@(comm)    | ftentoxl -> fp2
  48.     movew    #0x4112,a0@(comm)                | ftentoxl -> fp2
  49.     .long    0x0c688900, 0xfff067f8
  50.     movel    a7@(16),a0@                        | load Exponent_2
  51.  
  52. |    movew    #%0100 0001 0010 0011,a0@(comm)    | fmull Value_2 -> fp2
  53.     movew    #0x4123,a0@(comm)                | fmull Value_2 -> fp2
  54.     .long    0x0c688900, 0xfff067f8
  55.     movel    a7@(12),a0@                        | load Value_2
  56.  
  57. |    movew    #%0100 0000 1010 0011,a0@(comm)    | fmull Value_1 -> fp1
  58.     movew    #0x40a3,a0@(comm)                | fmull Value_1 -> fp1
  59.     .long    0x0c688900, 0xfff067f8
  60.     movel    a7@(4),a0@                        | load Value_1
  61.  
  62. |    movew    #%000 010 001 0100010,a0@(comm)    | faddx fp2 -> fp1
  63.     movew    #0x08a2,a0@(comm)                | faddx fp2 -> fp1
  64.     .word    0x4a68,0xfff0,0x6bfa            | test
  65.  
  66.     movew    #0x7480,a0@(comm)                | fmoved fp1 -> d0/d1
  67.     .long    0x0c688900, 0xfff067f8
  68.     movel    a0@,d0
  69.     movel    a0@,d1
  70.      rts
  71.